package com.sys.midware.MQ.rocketMQ.logic;

import java.util.List;
import java.util.Set;

import com.alibaba.rocketmq.client.exception.MQClientException;
import com.alibaba.rocketmq.common.message.MessageExt;
import com.alibaba.rocketmq.common.message.MessageQueue;

/**
 * 描述：
 * 	 rocketmq消费者类接口，使用示例：<br />
 *   <pre>
 *   IConsumer consumer = new ConsumerImpl();	
 *   consumer.register(messageListener, topics);	
 *   consumer.start(); 	
 *   
 *   // when you want shutdown	
 *   consumer.shutdown();
 *   </pre>
 *
 * @author jackyshang
 * @version 2017-07-05
 *
 */
public interface IPullConsumer {

	/**
	 * 描述：根据消息Id获取消息
	 * @param msgId
	 */
	public MessageExt viewMessage(String msgId);
	
	/**
	 * 描述： 拉取某个topic下的所有mq
	 *
	 * @param topic
	 */
	public Set<MessageQueue> fetchSubscribeMessageQueues(String topic);
	
	/**
     * 描述： 根据topic获取所有消息
     *
     * @param topic
     * @param tags
     */
    public List<MessageExt> getMessageExtList(String topic);
	/**
	 * 
	 * 描述：获取所有注册的topics
	 * @param  
	 * @return  Set<String>
	 */
    public Set<String> getRegisterTopics();
    /**
     * 
     * queryMessageByTopicAndKey 
     * 描述：根据topic和key查询message
     * @param  
     * @return  List<MessageExt>
     */
    public List<MessageExt> queryMessageByTopicAndKey(String topic,String key);
	/**
	 * 描述：启动消费者； 
	 *
	 * @throws MQClientException
	 */
	public void start();
	
	/**
	 * 描述：关闭消费者； 
	 *
	 */
	public void shutdown(); 

}
